fn main() {
    // You can optionally experiment here.
}

#[cfg(test)]
mod tests {
    #[test]
    fn slice_out_of_array() {
        let a = [1, 2, 3, 4, 5];

        // TODO: Get a slice called `nice_slice` out of the array `a` so that the test passes.
        // let nice_slice = ???

        // 切片左闭右开
        // 切片为引用类型
        let nice_slice = &a[1..4];
        assert_eq!([2, 3, 4], nice_slice);

        // 不可变数组a传入这个函数是否发生所有权转移？？ 答案: 不会
        array_test(a);

        // 这行打印 编译器是否会报错？？ 答案: 并不会报错
        // 数组中元素类型如果实现了copy trait 则数组本身也有这个特性
        // 当使用这个数组传入其他函数时，在当前栈中发生了值的拷贝，所有权并不会转移
        // 所以println不会报错
        println!("{}", a[0]);
    }

    fn array_test(arr: [i32; 5]) {
        println!("{}", arr[1])
    }
}
